/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dao;

import connection.Conexao;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import model.Funcao;

/**
 * Define as regras de manipulação de dados para o banco de funções;
 * @author Janio Luiz Antunes
 * @author Marcel Vinicius Kohls
 * @see http://code.google.com/p/sysdesk-java/
 *
 */
public class DAOFuncao {
    private final String SQL_LISTA_FUNCOES = "SELECT fun_codigo, fun_nome FROM funcao ORDER BY fun_nome";
    private final String SQL_BUSCA_POR_CODIGO = "SELECT fun_codigo, fun_nome FROM funcao WHERE fun_codigo = ?";

    /**
     * Retorna um resultSet com o resultado do comando de sql da lista das funcoes
     * @return
     * @throws Exception
     */
    public ResultSet getListaFuncoes() throws Exception {
        try {
            return Conexao.getStatement().executeQuery(SQL_LISTA_FUNCOES);
        }catch(SQLException sqle){
            throw new Exception(sqle);
        } catch(Exception e){
            throw new Exception(e);
        } finally{}
    }

    /**
     * retorna uma instancia de funcao a partir de uma busca no sql
     * pelo código passado como parametro.
     * @param pCodFuncao
     * @return
     * @throws Exception
     */
    public Funcao getFuncaoPorCodigo(int pCodFuncao) throws Exception {
        PreparedStatement sqlQuery = null;
        ResultSet sqlResult = null;
        Funcao resultadoFuncao = new Funcao();

        try {
            sqlQuery  = Conexao.getConnection().prepareStatement(SQL_BUSCA_POR_CODIGO);
            sqlQuery.setInt(1,  pCodFuncao );
            System.out.println( sqlQuery.toString() );
            sqlResult = sqlQuery.executeQuery();

            resultadoFuncao = getValorDoResultado(sqlResult);

            return resultadoFuncao;
        }catch(SQLException sqle){
            throw new Exception(sqle);
        } catch(Exception e){
            throw new Exception(e);
        } finally{}
    }

    /**
     * monta um objeto do tipo funcao, baseado em um retorno de pesquisa de sql em funcoes
     * @param pSqlResult
     * @return
     */
    public Funcao getValorDoResultado(ResultSet pSqlResult) throws Exception {
        Funcao objetoRetorno = new Funcao();

        try {

            // apenas define os campos do objeto se realmente retornou resultado
            if (pSqlResult.next()){
                objetoRetorno.setCodigo(pSqlResult.getInt("fun_codigo"));
                objetoRetorno.setDescricao(pSqlResult.getString("fun_nome"));
            }

        } catch (Exception e) {
            System.out.println("erro: getValorDoResultado: "+e.getMessage());
        }

        return objetoRetorno;
    }

}
